package com.itheima.aop;


import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Aspect //AOP类
public class TimeAspect {
    //           执行 public 任意返回值 com.itheima.service.所有service.所有方法(任意参数)
    @Around("execution(public * com.itheima.service.*.*(..))")//描述哪些service的哪些方法需要被增强
//                    调用业务层的方法 ProceedingJoinPoint
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
//        1.记录开始时间
//                          统计了开始时间 currentTimeMillis
        long start = System.currentTimeMillis();
//        2.调用原来的业务方法
//        proceed表示被调用的业务方法  方法的返回值不知道,所以用Object概括
        Object proceed = pjp.proceed();

//        3.记录结束时间
        long end = System.currentTimeMillis();
//        4.统计时间差
        log.info("{}运行时间:{}" ,pjp.getSignature().getName(),  end - start);
        log.info("{}运行时间:{}" ,pjp.getSignature().getName(),  end - start);
        log.info("{}运行时间:{}" ,pjp.getSignature().getName(),  end - start);
        log.info("{}运行时间:{}" ,pjp.getSignature().getName(),  end - start);

//        返回Object结果
        return proceed;
    }

}
